=== Rotate, Wheel Zoom, and Intuitive Drag Pan with Modal for NovelAI 説明書 (v1.7.38) ===

■ プラグイン概要
このプラグインは、NovelAIの画像グリッド上で画像を直感的に操作できる機能を追加します。
画像の回転、ズーム、ドラッグ移動が可能で、2種類のモーダルウィンドウ（モーダル1とモーダル2）を提供します。

モーダル1は自動で画像を更新し、
モーダル2は手動で同期（Ctrl+M）できます。
（モーダル2は主にi2iやインペイントで元画像との比較での使用を想定）

Tampermonkeyなどのユーザースクリプトマネージャーで使用することを想定しています。
※この説明書はバージョン 1.7.38 に対応しています。

■ 注意事項
- 環境: Edgeでの動作確認のみ実施済み。
  他のブラウザ (Chrome, Firefox など) では検証しておらず、動作保証外。
- Blob URLエラー (net::ERR_FILE_NOT_FOUND) 時は、
  モーダル2がフォールバックまたはテキストに戻る。
- 高DPIディスプレイで位置ズレが発生する場合、
  解像度/スケーリング設定を確認。
- NovelAI側のバージョンアップにより、
  本プラグインが使用できなくなる可能性がある。
- ログは10秒で3-5件程度。多い場合はスクリプト内のLOG_INTERVALを2000msに変更可能
  （詳細は■カスタマイズについてを確認）。
- 変更後の動作確認を必ず行い、問題があれば元に戻してください。
- 当プラグインで発生したいかなる問題も作者は責任を負わない。

■ 導入手順
1. Tampermonkey をインストール:
   - Chrome, Edge, Firefox 向けに公式サイト (https://www.tampermonkey.net/)
     から拡張機能を追加。
2. スクリプトの取得:
   - 以下のいずれかの方法でソースを取得。
     - **方法1: コピーペースト**
       - テキストエディタ（例: Windowsのメモ帳）を起動。
       - ソースファイル `Rotate_Whee-lZoom_DragPan_for_NAI_v1.7.38.user.js` を開き、
         全文字を選択してコピー。
       - Tampermonkeyのダッシュボードを開き、「新しいスクリプト」をクリック。
       - ペースト後、「ファイル」→「保存」を選択。
     - **方法2: ドラッグ＆ドロップ**
       - ソースファイル `Rotate_Whee-lZoom_DragPan_for_NAI_v1.7.38.user.js` を
         Tampermonkeyのダッシュボードにドラッグ＆ドロップ。
       - ブラウザが自動でインポートを提案するので、指示に従ってインストール。
3. スクリプトの有効化:
   - 貼り付けた後またはインポート後、
     https://novelai.net/image で動作確認。
4. 更新確認:
   - バージョンアップ時は、Tampermonkey ダッシュボードからスクリプトを上書き保存
     または新バージョンの `.user.js` をドラッグ＆ドロップで更新。

■ 主な機能
- **画像操作**: クリックで回転、ホイールでズーム（Shiftで細かく）、
  ドラッグで移動。
- **モーダル1**: F9でトグル。自動更新され、右クリックで閉じる。赤い枠線。
- **モーダル2**: F2でトグル。Ctrl+Mで手動同期、Alt+右クリックで閉じる。青い枠線。
- **リセット**: F8で位置とスケールをリセット（回転は保持）。

■ 操作方法
1. **基本操作**
   - 画像クリック: 90度回転。
   - マウスホイール: ズーム（Shiftで細調整、最小0.2、最大5）。
   - ドラッグ: 画像移動。
   - F8: 位置とスケールリセット（モーダル1/2も対象）。

2. **モーダル1 (MOD1)**
   - F9: 表示/非表示切り替え。
   - 自動更新: メイン画像が変更されると同期。
   - 右クリック: 閉じる。
   - ツールチップ: 「MOD1 自動更新\nF9 トグル open/close [MOD1]\nF8 配置リセット
     \n右クリック →MOD1を閉じる」。

3. **モーダル2 (MOD2)**
   - F2: 表示/非表示切り替え（画像/位置/拡大率/回転保持）。
   - Ctrl+M: 最新画像に手動同期。
   - Alt+右クリック: 閉じる。
   - 初回起動: 「CTRL+M 押下」テキスト表示（クリックで消去）。
   - ツールチップ: 「MOD2 任意更新\nF2 トグル open/close [MOD2]\nF8 配置リセット
     \n☆Ctrl+M →画像の任意更新\nAlt + 右クリック →MOD2を閉じる」。

■ トラブルシューティング
- 詳細ログ: コンソール (F12) で「Modal2 Text Created」「Ctrl+M Triggered」
  「Modal2 Image Update」などを確認。

■ カスタマイズについて
操作系のキーを変更したい場合、またはツールチップのコメントを編集したい場合、ソースコード内の以下の部分を編集してください。Tampermonkey ダッシュボードでスクリプトを開き、該当箇所を修正後保存します。

- **F2 (モーダル2トグル)**:
  - 変更箇所: 
    - 行番号: 356（`else if (e.key === 'F2') {`）。
  - 説明: `e.key === 'F2'` の部分を他のキー（例: `'F3'` や `'a'`）に変更。Fキーや文字キーを使用可能。
  - 注意: 他の機能と重複しないキーを選んでください。

- **F8 (リセット)**:
  - 変更箇所: 
    - 行番号: 352（`if (e.key === 'F8') {`）。
  - 説明: `e.key === 'F8'` を他のキー（例: `'F7'` や `'r'`）に変更。Fキーや文字キーを使用可能。
  - 注意: 既存のショートカットと競合しないように注意。

- **F9 (モーダル1トグル)**:
  - 変更箇所: 
    - 行番号: 354（`else if (e.key === 'F9') {`）。
  - 説明: `e.key === 'F9'` を他のキー（例: `'F10'` や `'m'`）に変更。Fキーや文字キーを使用可能。
  - 注意: NovelAIのデフォルトキーと重複しないことを確認。

- **Ctrl+M (モーダル2同期)**:
  - 変更箇所: 
    - 行番号: 358（`else if (e.ctrlKey && e.key.toLowerCase() === 'm') {`）。
  - 説明: `e.key.toLowerCase() === 'm'` を他のキー（例: `'s'`）に変更。`e.ctrlKey` を維持するか削除して単一キーも可。
  - 注意: Ctrl 組み合わせを変更する場合は、衝突を避ける。

- **ログ間隔 (LOG_INTERVAL)**:
  - 変更箇所: 
    - 行番号: 34（`const LOG_INTERVAL = 1000;`）。
  - 説明: ログの出力間隔（ミリ秒単位）を変更。例: `2000` にすると10秒でログが2-3件に減少。
  - 注意: 値が小さすぎるとパフォーマンスに影響する可能性あり。

- **ツールチップコメント (画像のマウスオーバーコメント)**:
  - 変更箇所:
    - 行番号: 218（`targetImage.setAttribute('title', 'Normal 画像\nF9 トグル open/close [MOD1]\nF8 配置リセット\nF2 トグル open/close [MOD2]\n\n(共通動作)ドラッグ →移動\n(共通動作)クリック →回転\n(共通動作)スクロール →拡縮 [+Shift押下で詳細拡大]');`）。
    - 行番号: 589（`modalImage.setAttribute('title', 'MOD1 自動更新\n\nF9 トグル open/close [MOD1]\nF8 配置リセット\n\n右クリック →MOD1を閉じる');`）。
    - 行番号: 743（`modal2Image.setAttribute('title', 'MOD2 任意更新\n\nF2 トグル open/close [MOD2]\nF8 配置リセット\n\n☆Ctrl+M →画像の任意更新\nAlt + 右クリック →MOD2を閉じる');`）。
  - 説明: 各 `setAttribute('title', '...')` 内の文字列を自由に編集。改行（`\n`）を使い、複数行に分けて記述可能。キーや操作説明をカスタマイズ。
  - 注意: 変更したキーとコメントが一致するよう調整してください。文字数が多い場合、表示が切れる可能性あり。

■ 開発情報
- バージョン: 1.7.38 (2025/06/27)
- 作者: Grok (xAI)
- ソースコード: コメント内に詳細記載。更新は随時反映。

■ 質問・フィードバック
- 問題は個人で解決するか、Grokに相談してください。利用環境 (ブラウザ、OS、解像度、Tampermonkey版、NovelAI版)
  とエラーログを添えてお知らせください。